
/* Generalizacion de funciones de control por internet */

-- Borro el esquema ARemito que pasa a no existir y con el las funciones

DROP SCHEMA IF EXISTS ARemito CASCADE;

-- Creo las nuevas

CREATE OR REPLACE FUNCTION subsistemas.web_analisiserror(
	funcion character varying,
	pidcomm integer,
	pmensaje character varying)
    RETURNS character varying
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$
DECLARE
  vMensajeJson  json;
  vRespuesta    varchar;
  vComillas     varchar;
BEGIN
  vComillas := chr(34);
  pMensaje  := replace(pMensaje, '@',vComillas);

  IF funcion = 'ARemito' THEN
  	vMensajeJson := cast(pMensaje as json);
   	IF (vMensajeJson ->> 'success') = 'false' THEN 
    	vRespuesta := str_sin_acentos(vMensajeJson ->> 'message');
  	END IF;
  END IF;
  
  RETURN vRespuesta;
END;
$BODY$;

ALTER FUNCTION subsistemas.web_analisiserror(character varying, integer, character varying)
    OWNER TO abacouser;
    
--     
    
CREATE OR REPLACE FUNCTION subsistemas.web_jsonaenviar(
	funcion varchar,
	pidcomm integer,
	pcodemp varchar)
    RETURNS character varying
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$
DECLARE
  vCuit 	varchar;
  vToken 	varchar;
  vFecha 	Timestamp;
  vNroPtoVta		integer;
  vNro 				integer;
  vCadenaProductos 	varchar;
  
  cCursorArtm   refcursor;
  
  vCodArt			varchar;
  vPresentacion		numeric;
  vCant				numeric;
  vSigno			integer;
  vvSigno			integer;
  
  vRespuesta varchar;
  
  vComillas     varchar;
BEGIN
  vComillas := chr(34);
  
  -- Las comillas no se pueden usar en scripts porque ODBC las elimina
  
  -- Json a enviar al ministerio.
 vRespuesta := '';
 
 IF funcion = 'ARemito' THEN
 	SELECT PAD.CUIT, COMM.FECHA, COMM.NROPTOVTA, COMM.NRO INTO
        vCuit, vFecha, vNroPtoVta, vNro
 	FROM PAD
 	INNER JOIN COMM ON COMM.IDPAD = PAD.ID
 	WHERE COMM.ID = pIdComm;
 
	vToken := cliente.TokenARemito(pCodEmp);
  
 	OPEN cCursorArtm FOR 
	  SELECT coalesce(codArtLote, 'SinCodigo'), coalesce(presentacionLote,1), coalesce(cant,1), signo
 	  FROM ARTM 
	  WHERE ARTM.IdComm = pIdComm; --AND NroLote is not null;
 
 	FETCH cCursorArtm INTO vCodArt, vPresentacion, vCant, vSigno;
	vvSigno := vSigno; 
 
 	vCadenaProductos := '';
 
 	LOOP
    	IF NOT FOUND THEN EXIT; END IF;
			vCadenaProductos := vCadenaProductos || 
	                   '{@@@nro_registro@@@:@@@' || vCodArt || '@@@,' ||
						'@@@cantidad@@@:' 	|| cast(vCant / vPresentacion as varchar) || ',' ||
						'@@@contenido@@@:' || cast(vPresentacion as varchar) || '},';
		FETCH cCursorArtm INTO vCodArt, vPresentacion, vCant, vSigno;
 	END LOOP;
 
 	IF vCadenaProductos <> '' THEN
    	vCadenaProductos := substring(vCadenaProductos, 1, length(vCadenaProductos) - 1); -- Le saco la coma.
		vRespuesta := 
		'{@@@token@@@:@@@' || vToken || '@@@,' ||
     	 '@@@devolucion@@@:' || CASE WHEN vvSigno = -1 THEN '0' ELSE '1' END || ',' || -- me quedo con el último signo
	 	 '@@@nro_aremito@@@:@@@'  || trim(to_char(coalesce(vNroPtoVta,0), '00000')) || trim(to_char(coalesce(vNro,0), '0000000000')) || '@@@,' ||
	 	 '@@@cuit_destino@@@:@@@'  || replace(coalesce(vCuit,''), '-','') || '@@@,' ||
	 	 '@@@fecha_emision@@@:@@@' || to_char(coalesce(vFecha,'20000101'), 'YYYY-MM-DD') || '@@@,' ||
	 	 '@@@productos@@@:[' || vCadenaProductos || ']}';
 	ELSE
		vRespuesta := '';
	END IF;
 END IF; 

 RETURN replace(vRespuesta,'@@@',vComillas);
 
END;
$BODY$;

ALTER FUNCTION subsistemas.web_jsonaenviar(varchar, integer, varchar)
    OWNER TO abacouser;
    
--
SELECT aaVersion('500.01','500.00');
--
o
